VS Code(Calva)でClojureを書くときに知りたかった便利な設定
長いことEmacsでClojureを書いていたのもあって、方方で「Clojure書くならEmacsしか勝たん」と言って憚らなかったんですが、最近そうも言ってられなくなってしまったのでVS CodeでClojureを書くようになっていました。 それでわりとよくDuctを使ってAPI開発をしているんですが、もっと早く知っていたかった機能がふたつあるんで書いておきます。 REPL起動時の設定
Calvaの場合、ctrl+alt+c ctrl+alt+jと入力するとPelase select a project typeといくつかのプロジェクトから起動方法を選択することができます。私の場合はLeiningenと選択することが多いです。その後、Pick any profiles to launch withと出てくるので使用したいプロファイルを選択することでJack-inが完了します。そこから更にREPLに(dev)などと入力しなければならないので少々鬱陶しいです。 これを省略することができるのがREPL Connect Sequencesです。例えば、以下のようにsettings.jsonを編集します。
code:settings.json
{
"calva.replConnectSequences": [
{
"name": "Duct Sequence",
"projectType": "Leiningen",
"afterCLJReplJackInCode": "(do (dev) (go))",
"cljsType": "none",
"menuSelections": {
"leinProfiles": [
"dev",
"repl"
],
}
}
]
}
このように設定するとJack-inコマンドを入力すると以下のスクリーンショットのようにDuct Sequenceというのが選択できるようになります。これを選択するとプロファイル選択をスキップして、REPLに接続後自動的に(do (dev) (go))が実行されるため、何もしなくてもAPIサーバーが起動します(何それ便利じゃん)。
https://gyazo.com/bfd22bd5279a297edc2d8b9882ba1860
詳細については以下のリンク先を参照してください。
よくREPLで使う関数をショートカットに登録する
Ductを使った開発でよく使う関数にresetがあると思います。devネームスペースで使うことができる関数ですが、Calvaの場合ちょっと面倒です。適当なネームスペース上の関数をevalする度に、REPL上のネームスペースが切り替わってしまうため、resetを使うときにctrl+alt+c oと入力してREPLのウィンドウに移動、その後(in-ns 'dev)を毎回入力した後に(reset)とする必要がありました。 これが本当に面倒なので、私はCalvaが嫌いだったんですが(最近はすっかり調教されてしまったので手が脳死で動くレベル)、どうやらこの悩みを解決する方法があるようです。settings.jsonに以下の設定を記述します。
code:settings.json
{
"calva.customREPLCommandSnippets": [
{
"name": "Jump to dev namespace",
"snippet": "(in-ns 'dev)",
"key": "d"
},
{
"name": "Reset Duct application",
"snippet": "(reset)",
"key": "r",
"ns": "dev"
}
]
}
コマンドパレットからCalva: Run Custom REPL Commandを選択します(あるいは適当なショートカットを割り当ててもok)。すると以下のスクリーンショットのようにメニューが選べるようになっています。ここで上記で設定したReset Duct applicationを選択すると自動的にdevネームスペースへと入り、(reset)が実行されます。これでだいぶ簡単になりました。
https://gyazo.com/d9c5f9d53583d787cfa790a7e6896306
詳細については以下のリンクを参照してください。